#ifndef __Collections_IEnumerable_H__
#define __Collections_IEnumerable_H__

///<summary>
/// IEnumerable<T>
///</summary>
//+ requires: Collections_IEnumerator
#define Collections_IEnumerable(T) bindT(Collections_IEnumerable,T)
#define Declare_Collections_IEnumerable(T, Ti) \
	private enum { \
		_Collections_IEnumerable_##T##VIndex_GetEnumerator, \
		_Collections_IEnumerable_##T##VIndexNext, \
	}; \
	public interfaceT(Collections_IEnumerable,T,, \
		virtualT(Collections_IEnumerable,T,Collections_IEnumerator(T) *,GetEnumerator); \
	);
#define Implement_Collections_IEnumerable(T, Ti) \
	Implement_TypeTI(Collections_IEnumerable,T,)

#endif /* __Collections_IEnumerable_H__ */